//@version=5
indicator('CASH CONTROL V2', overlay=true)

src = input(ohlc4, 'Price Data')
length2 = input(24, 'Lookback Window (originally = 24)')
showcross = input(true, 'Show labels?')
k = input(true, 'Use Kahlman Smoother?')
gain = input.float(1., 'Gain for the Smoother', step=.001)
o = input(true, 'Offset by 1 candle?')


hma3(x, p) =>
    per = p / 2
    ta.wma(ta.wma(x, per / 3) * 3 - ta.wma(x, per / 2) - ta.wma(x, per), per)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1], x) + dk * math.sqrt(g * 2)
    velo = 0.0
    velo := nz(velo[1], 0) + g * dk
    kf := smooth + velo
    kf

a = k ? kahlman(ta.hma(src, length2), gain) : ta.hma(src, length2)
b = k ? kahlman(hma3(close, length2), gain) : hma3(close, length2)
c = b > a ? color.lime : color.red
long = b > a and b[1] < a[1]
short = a > b and a[1] < b[1]

fill(plot(a, color=c, linewidth=1, transp=75), plot(b, color=c, linewidth=1, transp=75), color=c, transp=55)
plotshape(showcross and long ? a : na, location=location.belowbar, style=shape.labelup, color=color.new(color.green, 0), size=size.tiny, text='', textcolor=color.new(color.white, 0), offset=o ? -1 : 0)
plotshape(showcross and short ? a : na, location=location.abovebar, style=shape.labeldown, color=color.new(color.red, 0), size=size.tiny, text='', textcolor=color.new(color.white, 0), offset=o ? -1 : 0)


//Heikin Ashi Mumlarnn Hesaplanmasna dair gereken kodlar   \\

haopen = 0.0
haclose = (open + high + low + close) / 4
haopen := na(haopen[1]) ? (open + close) / 2 : (haopen[1] + haclose[1]) / 2
hahigh = math.max(high, math.max(haopen, haclose))
halow = math.min(low, math.min(haopen, haclose))

// Heikin Ashi Renkleri
hacolor = haclose > haopen ? color.lime : color.red

// Al ve Sat sinyalleri
turnGreen = haclose > haopen and haclose[1] <= haopen[1]
turnRed = haclose <= haopen and haclose[1] > haopen[1]

// Plot Komutlar

//bgcolor(hacolor, title="Heikin Ashi Background Color")
barcolor(hacolor, title='> Bar Renkleri')
plotshape(turnGreen, title='> Al Sinyali Rengi', style=shape.labelup, location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny, text='AL')
plotshape(turnRed, title='> Sat Sinyali Rengi', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny, text='SAT')

alertcondition(turnGreen, 'Al Sinyali Ayarla', 'Al Sinyali Ayarla')
alertcondition(turnRed, 'Sat Sinyali Ayarla', 'Sat Sinyali Ayarla')

// EMA Kanal


length = input(9)


e = ta.ema(close, length)
eu = ta.ema(high, length), 
el = ta.ema(low, length)


plot(eu, color=color.new(color.orange, 1), linewidth=3)
plot(el, color=color.new(color.orange, 1), linewidth=3)


bull_color_normal = color.orange
bull_color_strong = color.orange
bear_color_normal = color.orange
bear_color_strong = color.orange
sidewise_color = color.blue

bull_f = high > eu and low > el
bear_f = high < eu and low < el
sidewise_f = not bull_f and not bear_f
b_color = bull_f ? bull_color_normal : bear_f ? bear_color_normal : sidewise_f ? sidewise_color : na
d_color = bull_f ? low > eu ? bull_color_strong : b_color : bear_f ? high < el ? bear_color_strong : b_color : b_color

// destek ve direnler

left = 50
right = 25
quick_right = 5  // Used to try and detect a more recent significant swing.



pivot_high = ta.pivothigh(high, left, right)
pivot_lows = ta.pivotlow(low, left, right)

quick_pivot_high = ta.pivothigh(high, left, quick_right)
quick_pivot_lows = ta.pivotlow(low, left, quick_right)

level1 = ta.valuewhen(quick_pivot_high, high[quick_right], 0)
level2 = ta.valuewhen(quick_pivot_lows, low[quick_right], 0)
level3 = ta.valuewhen(pivot_high, high[right], 0)
level4 = ta.valuewhen(pivot_lows, low[right], 0)
level5 = ta.valuewhen(pivot_high, high[right], 1)
level6 = ta.valuewhen(pivot_lows, low[right], 1)
level7 = ta.valuewhen(pivot_high, high[right], 2)
level8 = ta.valuewhen(pivot_lows, low[right], 2)

level1_col = close >= level2 ? color.green : color.red 
level2_col = close >= level2 ? color.green : color.red 
level3_col = close >= level3 ? color.green : color.red
level4_col = close >= level4 ? color.green : color.red
level5_col = close >= level5 ? color.green : color.red
level6_col = close >= level6 ? color.green : color.red
level7_col = close >= level7 ? color.green : color.red
level8_col = close >= level8 ? color.green : color.red

plot(level1, style=plot.style_circles, color=level1_col, show_last=1, linewidth=3, trackprice=true)
plot(level2, style=plot.style_circles, color=level2_col, show_last=1, linewidth=3, trackprice=true)
plot(level3, style=plot.style_circles, color=level3_col, show_last=1, linewidth=3, trackprice=true)
plot(level4, style=plot.style_circles, color=level4_col, show_last=1, linewidth=3, trackprice=true)
plot(level5, style=plot.style_circles, color=level5_col, show_last=1, linewidth=3, trackprice=true)
plot(level6, style=plot.style_circles, color=level6_col, show_last=1, linewidth=3, trackprice=true)
plot(level7, style=plot.style_circles, color=level7_col, show_last=1, linewidth=3, trackprice=true)
plot(level8, style=plot.style_circles, color=level8_col, show_last=1, linewidth=3, trackprice=true)


//pivotlar
AUTO = 'Otomatik'
DAILY = 'Gnlk'
WEEKLY = 'Haftalk'
MONTHLY = 'Aylk'
QUARTERLY = '6 Aylk'
YEARLY = 'Yllk'
BIYEARLY = 'ki yllk'
TRIYEARLY = '3 Yllk'
QUINQUENNIAL = 'Quinquennial'

TRADITIONAL = 'Traditional'
FIBONACCI = 'Fibonacci'
WOODIE = 'Woodie'
CLASSIC = 'Classic'
DEMARK = 'DM'
CAMARILLA = 'Camarilla'

kind = input.string(title='Type', defval='Fibonacci', options=[TRADITIONAL, FIBONACCI, WOODIE, CLASSIC, DEMARK, CAMARILLA])
pivot_time_frame = input.string(title='Pivots Timeframe', defval=AUTO, options=[AUTO, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY, BIYEARLY, TRIYEARLY, QUINQUENNIAL])
look_back = input.int(title='Number of Pivots Back', defval=15, minval=1, maxval=5000)
is_daily_based = input.bool(title='Use Daily-based Values', defval=true, tooltip='When this option is unchecked, Pivot Points will use intraday data while calculating on intraday charts. If Extended Hours are displayed on the chart, they will be taken into account during the pivot level calculation. If intraday OHLC values are different from daily-based values (normal for stocks), the pivot levels will also differ.')

show_labels = input.bool(title='Show Labels', defval=true, inline='labels')
position_labels = input.string('Left', '', options=['Left', 'Right'], inline='labels')

var DEF_COLOR = #2986CC
var arr_time = array.new_int()
var p = array.new_float()
p_show = input.bool(true, 'P?  ?  ?  ?  ?  ?  ?  ?', inline='P')
p_color = input.color(DEF_COLOR, '', inline='P')

var r1 = array.new_float()
var s1 = array.new_float()
s1r1_show = input.bool(true, 'S1/R1', inline='S1/R1')
s1r1_color = input.color(DEF_COLOR, '', inline='S1/R1')

var r2 = array.new_float()
var s2 = array.new_float()
s2r2_show = input.bool(true, 'S2/R2', inline='S2/R2')
s2r2_color = input.color(DEF_COLOR, '', inline='S2/R2')

var r3 = array.new_float()
var s3 = array.new_float()
s3r3_show = input.bool(true, 'S3/R3', inline='S3/R3')
s3r3_color = input.color(DEF_COLOR, '', inline='S3/R3')

var r4 = array.new_float()
var s4 = array.new_float()
s4r4_show = input.bool(true, 'S4/R4', inline='S4/R4')
s4r4_color = input.color(DEF_COLOR, '', inline='S4/R4')

var r5 = array.new_float()
var s5 = array.new_float()
s5r5_show = input.bool(true, 'S5/R5', inline='S5/R5')
s5r5_color = input.color(DEF_COLOR, '', inline='S5/R5')

pivotX_open = float(na)
pivotX_open := nz(pivotX_open[1], open)
pivotX_high = float(na)
pivotX_high := nz(pivotX_high[1], high)
pivotX_low = float(na)
pivotX_low := nz(pivotX_low[1], low)
pivotX_prev_open = float(na)
pivotX_prev_open := nz(pivotX_prev_open[1])
pivotX_prev_high = float(na)
pivotX_prev_high := nz(pivotX_prev_high[1])
pivotX_prev_low = float(na)
pivotX_prev_low := nz(pivotX_prev_low[1])
pivotX_prev_close = float(na)
pivotX_prev_close := nz(pivotX_prev_close[1])

get_pivot_resolution() =>
    resolution = 'M'
    if pivot_time_frame == AUTO
        if timeframe.isintraday
            resolution := timeframe.multiplier <= 15 ? 'D' : 'W'
            resolution
        else if timeframe.isweekly or timeframe.ismonthly
            resolution := '12M'
            resolution
    else if pivot_time_frame == DAILY
        resolution := 'D'
        resolution
    else if pivot_time_frame == WEEKLY
        resolution := 'W'
        resolution
    else if pivot_time_frame == MONTHLY
        resolution := 'M'
        resolution
    else if pivot_time_frame == QUARTERLY
        resolution := '3M'
        resolution
    else if pivot_time_frame == YEARLY or pivot_time_frame == BIYEARLY or pivot_time_frame == TRIYEARLY or pivot_time_frame == QUINQUENNIAL
        resolution := '12M'
        resolution
    resolution

var lines = array.new_line()
var labels = array.new_label()

draw_line(i, pivot, col) =>
    if array.size(arr_time) > 1
        array.push(lines, line.new(array.get(arr_time, i), array.get(pivot, i), array.get(arr_time, i + 1), array.get(pivot, i), color=col, xloc=xloc.bar_time))

draw_label(i, y, txt, txt_color) =>
    if show_labels
        offset = '?  ?  ?  ?  ?'
        labels_align_str_left = position_labels == 'Left' ? txt + offset : offset + txt
        x = position_labels == 'Left' ? array.get(arr_time, i) : array.get(arr_time, i + 1)
        array.push(labels, label.new(x=x, y=y, text=labels_align_str_left, textcolor=txt_color, style=label.style_label_center, color=#00000000, xloc=xloc.bar_time))

traditional() =>
    pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
    array.push(p, pivotX_Median)
    array.push(r1, pivotX_Median * 2 - pivotX_prev_low)
    array.push(s1, pivotX_Median * 2 - pivotX_prev_high)
    array.push(r2, pivotX_Median + 1 * (pivotX_prev_high - pivotX_prev_low))
    array.push(s2, pivotX_Median - 1 * (pivotX_prev_high - pivotX_prev_low))
    array.push(r3, pivotX_Median * 2 + pivotX_prev_high - 2 * pivotX_prev_low)
    array.push(s3, pivotX_Median * 2 - (2 * pivotX_prev_high - pivotX_prev_low))
    array.push(r4, pivotX_Median * 3 + pivotX_prev_high - 3 * pivotX_prev_low)
    array.push(s4, pivotX_Median * 3 - (3 * pivotX_prev_high - pivotX_prev_low))
    array.push(r5, pivotX_Median * 4 + pivotX_prev_high - 4 * pivotX_prev_low)
    array.push(s5, pivotX_Median * 4 - (4 * pivotX_prev_high - pivotX_prev_low))

fibonacci() =>
    pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
    pivot_range = pivotX_prev_high - pivotX_prev_low
    array.push(p, pivotX_Median)
    array.push(r1, pivotX_Median + 0.382 * pivot_range)
    array.push(s1, pivotX_Median - 0.382 * pivot_range)
    array.push(r2, pivotX_Median + 0.618 * pivot_range)
    array.push(s2, pivotX_Median - 0.618 * pivot_range)
    array.push(r3, pivotX_Median + 1 * pivot_range)
    array.push(s3, pivotX_Median - 1 * pivot_range)

woodie() =>
    pivotX_Woodie_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_open * 2) / 4
    pivot_range = pivotX_prev_high - pivotX_prev_low
    array.push(p, pivotX_Woodie_Median)
    array.push(r1, pivotX_Woodie_Median * 2 - pivotX_prev_low)
    array.push(s1, pivotX_Woodie_Median * 2 - pivotX_prev_high)
    array.push(r2, pivotX_Woodie_Median + 1 * pivot_range)
    array.push(s2, pivotX_Woodie_Median - 1 * pivot_range)

    pivot_point_r3 = pivotX_prev_high + 2 * (pivotX_Woodie_Median - pivotX_prev_low)
    pivot_point_s3 = pivotX_prev_low - 2 * (pivotX_prev_high - pivotX_Woodie_Median)
    array.push(r3, pivot_point_r3)
    array.push(s3, pivot_point_s3)
    array.push(r4, pivot_point_r3 + pivot_range)
    array.push(s4, pivot_point_s3 - pivot_range)

classic() =>
    pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
    pivot_range = pivotX_prev_high - pivotX_prev_low
    array.push(p, pivotX_Median)
    array.push(r1, pivotX_Median * 2 - pivotX_prev_low)
    array.push(s1, pivotX_Median * 2 - pivotX_prev_high)
    array.push(r2, pivotX_Median + 1 * pivot_range)
    array.push(s2, pivotX_Median - 1 * pivot_range)
    array.push(r3, pivotX_Median + 2 * pivot_range)
    array.push(s3, pivotX_Median - 2 * pivot_range)
    array.push(r4, pivotX_Median + 3 * pivot_range)
    array.push(s4, pivotX_Median - 3 * pivot_range)

demark() =>
    pivotX_Demark_X = pivotX_prev_high + pivotX_prev_low * 2 + pivotX_prev_close
    if pivotX_prev_close == pivotX_prev_open
        pivotX_Demark_X := pivotX_prev_high + pivotX_prev_low + pivotX_prev_close * 2
        pivotX_Demark_X
    if pivotX_prev_close > pivotX_prev_open
        pivotX_Demark_X := pivotX_prev_high * 2 + pivotX_prev_low + pivotX_prev_close
        pivotX_Demark_X
    array.push(p, pivotX_Demark_X / 4)
    array.push(r1, pivotX_Demark_X / 2 - pivotX_prev_low)
    array.push(s1, pivotX_Demark_X / 2 - pivotX_prev_high)

camarilla() =>
    pivotX_Median = (pivotX_prev_high + pivotX_prev_low + pivotX_prev_close) / 3
    pivot_range = pivotX_prev_high - pivotX_prev_low
    array.push(p, pivotX_Median)
    array.push(r1, pivotX_prev_close + pivot_range * 1.1 / 12.0)
    array.push(s1, pivotX_prev_close - pivot_range * 1.1 / 12.0)
    array.push(r2, pivotX_prev_close + pivot_range * 1.1 / 6.0)
    array.push(s2, pivotX_prev_close - pivot_range * 1.1 / 6.0)
    array.push(r3, pivotX_prev_close + pivot_range * 1.1 / 4.0)
    array.push(s3, pivotX_prev_close - pivot_range * 1.1 / 4.0)
    array.push(r4, pivotX_prev_close + pivot_range * 1.1 / 2.0)
    array.push(s4, pivotX_prev_close - pivot_range * 1.1 / 2.0)

resolution = get_pivot_resolution()

[sec_open, sec_high, sec_low, sec_close] = request.security(syminfo.tickerid, resolution, [open, high, low, close], lookahead=barmerge.lookahead_on)
sec_open_gaps_on = request.security(syminfo.tickerid, resolution, open, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_on)

var number_of_years = 0
is_change_years = false
var custom_years_resolution = pivot_time_frame == BIYEARLY or pivot_time_frame == TRIYEARLY or pivot_time_frame == QUINQUENNIAL
if custom_years_resolution and ta.change(time(resolution))
    number_of_years += 1
    if pivot_time_frame == BIYEARLY and number_of_years % 2 == 0
        is_change_years := true
        number_of_years := 0
        number_of_years
    else if pivot_time_frame == TRIYEARLY and number_of_years % 3 == 0
        is_change_years := true
        number_of_years := 0
        number_of_years
    else if pivot_time_frame == QUINQUENNIAL and number_of_years % 5 == 0
        is_change_years := true
        number_of_years := 0
        number_of_years

var is_change = false
var uses_current_bar = timeframe.isintraday and kind == WOODIE
var change_time = int(na)
is_time_change = ta.change(time(resolution)) and not custom_years_resolution or is_change_years
if is_time_change
    change_time := time
    change_time


if not uses_current_bar and is_time_change or uses_current_bar and not na(sec_open_gaps_on)
    if is_daily_based
        pivotX_prev_open := sec_open[1]
        pivotX_prev_high := sec_high[1]
        pivotX_prev_low := sec_low[1]
        pivotX_prev_close := sec_close[1]
        pivotX_open := sec_open
        pivotX_high := sec_high
        pivotX_low := sec_low
        pivotX_low
    else
        pivotX_prev_high := pivotX_high
        pivotX_prev_low := pivotX_low
        pivotX_prev_open := pivotX_open
        pivotX_open := open
        pivotX_high := high
        pivotX_low := low
        pivotX_prev_close := close[1]
        pivotX_prev_close

    if barstate.islast and not is_change and array.size(arr_time) > 0
        array.set(arr_time, array.size(arr_time) - 1, change_time)
    else
        array.push(arr_time, change_time)

    if kind == TRADITIONAL
        traditional()
    else if kind == FIBONACCI
        fibonacci()
    else if kind == WOODIE
        woodie()
    else if kind == CLASSIC
        classic()
    else if kind == DEMARK
        demark()
    else if kind == CAMARILLA
        camarilla()

    if array.size(arr_time) > look_back
        if array.size(arr_time) > 0
            array.shift(arr_time)
        if array.size(p) > 0 and p_show
            array.shift(p)
        if array.size(r1) > 0 and s1r1_show
            array.shift(r1)
        if array.size(s1) > 0 and s1r1_show
            array.shift(s1)
        if array.size(r2) > 0 and s2r2_show
            array.shift(r2)
        if array.size(s2) > 0 and s2r2_show
            array.shift(s2)
        if array.size(r3) > 0 and s3r3_show
            array.shift(r3)
        if array.size(s3) > 0 and s3r3_show
            array.shift(s3)
        if array.size(r4) > 0 and s4r4_show
            array.shift(r4)
        if array.size(s4) > 0 and s4r4_show
            array.shift(s4)
        if array.size(r5) > 0 and s5r5_show
            array.shift(r5)
        if array.size(s5) > 0 and s5r5_show
            array.shift(s5)
    is_change := true
    is_change
else
    if is_daily_based
        pivotX_high := math.max(pivotX_high, sec_high)
        pivotX_low := math.min(pivotX_low, sec_low)
        pivotX_low
    else
        pivotX_high := math.max(pivotX_high, high)
        pivotX_low := math.min(pivotX_low, low)
        pivotX_low

if barstate.islast and array.size(arr_time) > 0 and is_change
    is_change := false
    if array.size(arr_time) > 2 and custom_years_resolution
        last_pivot_time = array.get(arr_time, array.size(arr_time) - 1)
        prev_pivot_time = array.get(arr_time, array.size(arr_time) - 2)
        estimate_pivot_time = last_pivot_time - prev_pivot_time
        array.push(arr_time, last_pivot_time + estimate_pivot_time)
    else
        array.push(arr_time, time_close(resolution))

    for i = 0 to array.size(lines) - 1 by 1
        if array.size(lines) > 0
            line.delete(array.shift(lines))
        if array.size(lines) > 0
            label.delete(array.shift(labels))

    for i = 0 to array.size(arr_time) - 2 by 1
        if array.size(p) > 0 and p_show
            draw_line(i, p, p_color)
            draw_label(i, array.get(p, i), 'P', p_color)
        if array.size(r1) > 0 and s1r1_show
            draw_line(i, r1, s1r1_color)
            draw_label(i, array.get(r1, i), 'R1', s1r1_color)
        if array.size(s1) > 0 and s1r1_show
            draw_line(i, s1, s1r1_color)
            draw_label(i, array.get(s1, i), 'S1', s1r1_color)
        if array.size(r2) > 0 and s2r2_show
            draw_line(i, r2, s2r2_color)
            draw_label(i, array.get(r2, i), 'R2', s2r2_color)
        if array.size(s2) > 0 and s2r2_show
            draw_line(i, s2, s2r2_color)
            draw_label(i, array.get(s2, i), 'S2', s2r2_color)
        if array.size(r3) > 0 and s3r3_show
            draw_line(i, r3, s3r3_color)
            draw_label(i, array.get(r3, i), 'R3', s3r3_color)
        if array.size(s3) > 0 and s3r3_show
            draw_line(i, s3, s3r3_color)
            draw_label(i, array.get(s3, i), 'S3', s3r3_color)
        if array.size(r4) > 0 and s4r4_show
            draw_line(i, r4, s4r4_color)
            draw_label(i, array.get(r4, i), 'R4', s4r4_color)
        if array.size(s4) > 0 and s4r4_show
            draw_line(i, s4, s4r4_color)
            draw_label(i, array.get(s4, i), 'S4', s4r4_color)
        if array.size(r5) > 0 and s5r5_show
            draw_line(i, r5, s5r5_color)
            draw_label(i, array.get(r5, i), 'R5', s5r5_color)
        if array.size(s5) > 0 and s5r5_show
            draw_line(i, s5, s5r5_color)
            draw_label(i, array.get(s5, i), 'S5', s5r5_color)

// TRENDLINE // trend line

//###### FUNCTIONS ##################################//
truncate(number, decimals) =>
    factor = math.pow(10, decimals)
    int(number * factor) / factor

nround(x) =>
    n = math.round(x / syminfo.mintick) * syminfo.mintick
    n

chosenColor(c_) =>
    c_ == 'aqua' ? #00FFFFff : c_ == 'blue' ? #0040FFff : c_ == 'fuchsia' ? color.rgb(218, 251, 0) : c_ == 'gray' ? #808080ff : c_ == 'green' ? #008000ff : c_ == 'lime' ? #00FF00ff : c_ == 'maroon' ? #800000ff : c_ == 'navy' ? #000099ff : c_ == 'olive' ? #808000ff : c_ == 'orange' ? #FF8000ff : c_ == 'purple' ? #8000FFff : c_ == 'red' ? #ff0000ff : c_ == 'silver' ? #C0C0C0ff : c_ == 'teal' ? #008080ff : c_ == 'white' ? #FFFFFFff : #00000000

//###### DRAW TREND CHANNEL#########################//
period = input.int(100, 'Period', minval=3)
deviations = input.float(2.0, 'Deviation(s)', minval=0.1, step=0.1)
extendType = input.string('Right', 'Extend Method', options=['Right', 'None']) == 'None' ? extend.none : extend.right
periodMinusOne = period - 1
Ex = 0.0
Ey = 0.0
Ex2 = 0.0
Exy = 0.0
for i = 0 to periodMinusOne by 1
    closeI = nz(close[i])
    Ex += i
    Ey += closeI
    Ex2 += i * i
    Exy += closeI * i
    Exy
ExEx = Ex * Ex
slope = Ex2 == ExEx ? 0.0 : (period * Exy - Ex * Ey) / (period * Ex2 - ExEx)
linearRegression = (Ey - slope * Ex) / period
intercept = linearRegression + bar_index * slope
deviation = 0.0
for i = 0 to periodMinusOne by 1
    deviation += math.pow(nz(close[i]) - (intercept - slope * bar_index[i]), 2.0)
    deviation
deviation := deviations * math.sqrt(deviation / periodMinusOne)
startingPointY = linearRegression + slope * periodMinusOne


//####### DRAWING LINES SECTION ####
var line upperChannelLine = na
var line medianChannelLine = na
var line lowerChannelLine = na
line.delete(upperChannelLine[1])
line.delete(medianChannelLine[1])
line.delete(lowerChannelLine[1])

// added color inputs
upperLineColor = input.string(title='Upper Channel Color', defval='fuchsia', options=['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'orange', 'purple', 'red', 'silver', 'teal', 'white', 'yellow'])
middleLineColor = input.string(title='Middle Channel Color', defval='orange', options=['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'orange', 'purple', 'red', 'silver', 'teal', 'white', 'yellow'])
lowerChannelColor = input.string(title='Lower Channel Color', defval='fuchsia', options=['aqua', 'black', 'blue', 'fuchsia', 'gray', 'green', 'lime', 'maroon', 'navy', 'olive', 'orange', 'purple', 'red', 'silver', 'teal', 'white', 'yellow'])

// draw channels
upperChannelLine := line.new(bar_index - period + 1, startingPointY + deviation, bar_index, linearRegression + deviation, xloc.bar_index, extendType, chosenColor(upperLineColor), line.style_solid, 3)
medianChannelLine := line.new(bar_index - period + 1, startingPointY, bar_index, linearRegression, xloc.bar_index, extendType, chosenColor(middleLineColor), line.style_solid, 1)
lowerChannelLine := line.new(bar_index - period + 1, startingPointY - deviation, bar_index, linearRegression - deviation, xloc.bar_index, extendType, chosenColor(lowerChannelColor), line.style_solid, 3)

disp_panels = input(true, title='Display info panels?')
linear_label_off = input.int(0, title='linear label offset', minval=0)
linear_label_size = input.string(size.normal, options=[size.tiny, size.small, size.normal, size.large, size.huge], title='linear label size')
pos_x = timenow + math.round(ta.change(time) * linear_label_off)
pos_y_upper = nround(linearRegression + deviation)
candle_look_back = input.int(defval=3, title='Look back', minval=1, maxval=5, step=1)
pos_y_upper_previous = nround(linearRegression[candle_look_back] + deviation[candle_look_back])
// pos_y_middle = nround(linearRegression) // doesn't need midde line
pos_y_lower = truncate(nround(linearRegression - deviation), 5)
pos_y_lower_previous = nround(linearRegression[candle_look_back] - deviation[candle_look_back])





// to memorize entries 

//####### ALERT PANEL SECTION ####
ready_to_sell = ta.crossover(close, pos_y_upper_previous)
ready_to_buy = ta.crossunder(close, pos_y_lower_previous)




